package solution.T0215_2_UIKit;

import solution.T0215_2_UIKit.kit.Button;
import solution.T0215_2_UIKit.kit.Checkbox;
import solution.T0215_2_UIKit.kit.GUIFactory;

/**
 * 本项目旨在提供跨操作系统的 GUI 组件（按钮和复选框）的动态创建方案。
 * 该方案能够适配不同操作系统（Windows 和 Mac），并允许通过 配置文件 进行动态切换，避免硬编码，提高系统的灵活性和可维护性。
 * 提示：
 * PropertyUtil 模拟了配置文件的读取和写入功能。
 * ReflectUtil 中有反射的支持函数，允许你通过类名（字符串）创建这个类的一个实例。
 *
 * 请你补全 Application，MacFactory, WindowsFactory 中空缺的代码。
 */
public class Application {
    private final Button button;
    private final Checkbox checkbox;

    public Application() {
        String osType = PropertyUtil.getProperty("osType");
        String factoryClassName = PropertyUtil.getProperty("factory." + osType);

        GUIFactory abstractFactory = (GUIFactory) ReflectUtil.createObjectFromClassName(factoryClassName);

        this.button = abstractFactory.createButton();
        this.checkbox = abstractFactory.createCheckbox();
    }

    public String getButtonDescription() {
        return button.getDescription();
    }

    public String getCheckboxDescription() {
        return checkbox.getDescription();
    }

    public void clickButton() {
        button.click();
    }

    public boolean isButtonClicked() {
        return button.isClicked();
    }

    public void checkCheckbox() {
        checkbox.check();
    }

    public boolean isCheckboxChecked() {
        return checkbox.isChecked();
    }
}